package com.prsistema.DAO;

import com.prsistema.utilitarias.Empresa;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class DAOFornecedor {
    
    private Connection conector;

    public DAOFornecedor(Connection conector) {
        this.conector = conector;
    }
    
    public boolean insert(Empresa forn) {
        PreparedStatement pstm = null;
        try {
            final String sql = "insert into fornecedor (fnc_nome, fnc_cnpj , fnc_inscEstadual , fnc_cep, fnc_estado, fnc_municipio," 
	    + "fnc_endereco, fnc_bairro, fnc_complemento, fnc_email, fnc_telefone, fnc_celular , fnc_responsavel, fnc_infoAdd) "
            + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            pstm = conector.prepareStatement(sql);

            pstm.setString(1, forn.getNome());
            pstm.setString(2, forn.getCnpj());
            pstm.setString(3, forn.getInscEstadual());
            pstm.setString(4, forn.getCep());
            pstm.setString(5, forn.getEstado());
            pstm.setString(6, forn.getMunicipio());
            pstm.setString(7, forn.getEndereco());
            pstm.setString(8, forn.getBairro());
            pstm.setString(9, forn.getComplemento());
            pstm.setString(10, forn.getEmail());
            pstm.setString(11, forn.getTelefone());
            pstm.setString(12, forn.getCelular());
            pstm.setString(13, forn.getResponsavel());
            pstm.setString(14, forn.getInfoAdd());
            
            pstm.executeUpdate();
            pstm.close();
            
            return true;

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao salvar no Banco de Dados: " + ex);
            return false;
        }
    }
    
    public boolean delete(long id) {
        PreparedStatement pstm = null;
        try {
            final String sql = "delete from fornecedor where fnc_id=(?)";
            pstm = this.conector.prepareStatement(sql);
            pstm.setLong(1, id);
            pstm.executeUpdate();
            pstm.close();
            return true;
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null, "Erro ao excluir: " + erro);
            return false;
        }
    }
    
    public boolean update(Empresa forn){
        PreparedStatement pstm = null;
        try {
            final String sql = "update fornecedor set fnc_nome=(?), fnc_cnpj=(?), fnc_inscEstadual=(?), fnc_cep=(?), fnc_estado=(?), "
                    + "fnc_municipio=(?), fnc_endereco=(?), fnc_bairro=(?), fnc_complemento=(?), fnc_email=(?), fnc_telefone=(?), "
                    + "fnc_celular=(?) , fnc_responsavel=(?), fnc_infoAdd=(?) where fnc_id=(?)";
     
            pstm = this.conector.prepareStatement(sql);
            pstm.setString(1, forn.getNome());
            pstm.setString(2, forn.getCnpj());
            pstm.setString(3, forn.getInscEstadual());
            pstm.setString(4, forn.getCep());
            pstm.setString(5, forn.getEstado());
            pstm.setString(6, forn.getMunicipio());
            pstm.setString(7, forn.getEndereco());
            pstm.setString(8, forn.getBairro());
            pstm.setString(9, forn.getComplemento());
            pstm.setString(10, forn.getEmail());
            pstm.setString(11, forn.getTelefone());
            pstm.setString(12, forn.getCelular());
            pstm.setString(13, forn.getResponsavel());
            pstm.setString(14, forn.getInfoAdd());
            pstm.setLong(15, forn.getId());
            pstm.executeUpdate();
            pstm.close();
            return true;
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null, "Erro ao alterar: " + erro);
            return false;
        }
    }
    
    public ArrayList<Empresa> selectAll() {
        ArrayList<Empresa> fornecedores = new ArrayList<Empresa>();
        PreparedStatement pstm = null;
        
        try {
            String sql = "select * from fornecedor order by fnc_nome";
            pstm = this.conector.prepareStatement(sql);
            ResultSet resultado = pstm.executeQuery();

            while (resultado.next()) {
                Empresa forn = new Empresa();

                forn.setId(resultado.getLong("fnc_id"));
                forn.setNome(resultado.getString("fnc_nome"));
                forn.setCnpj(resultado.getString("fnc_cnpj"));
                forn.setInscEstadual(resultado.getString("fnc_inscEstadual"));
                forn.setCep(resultado.getString("fnc_cep"));
                forn.setEstado(resultado.getString("fnc_estado"));
                forn.setMunicipio(resultado.getString("fnc_municipio"));
                forn.setEndereco(resultado.getString("fnc_endereco"));
                forn.setBairro(resultado.getString("fnc_bairro"));
                forn.setComplemento(resultado.getString("fnc_complemento"));
                forn.setEmail(resultado.getString("fnc_email"));
                forn.setTelefone(resultado.getString("fnc_telefone"));
                forn.setCelular(resultado.getString("fnc_celular"));
                forn.setResponsavel(resultado.getString("fnc_responsavel"));
                forn.setInfoAdd(resultado.getString("fnc_infoAdd"));

                fornecedores.add(forn);
            }

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Erro ao carregar dados: " + ex);
            fornecedores = null;
        } finally {
            return fornecedores;
        }
    }
    
}
